namespace Test.ConsoleProgram.Algorithm.Solution
{
    [TestDescription("算法: 0167. 两数之和 II - 输入有序数组")]
    public class No0167_TwoSum : AbsBaseTestItem
    {
        /*
        给定一个已按照升序排列 的有序数组，找到两个数使得它们相加之和等于目标数。
        函数应该返回这两个下标值 index1 和 index2，其中 index1 必须小于 index2。
        说明:
            返回的下标值（index1 和 index2）不是从零开始的。
            你可以假设每个输入只对应唯一的答案，而且你不可以重复使用相同的元素。
        */

        public override void OnTest()
        {
            Assert.TestExe(TwoSum,
                new int[] { 2, 7, 11, 15 }, 9,
                new int[] { 1, 2 });
        }

        public int[] TwoSum(int[] numbers, int target)
        {
            int left = 0, right = numbers.Length - 1;
            while (left < right)
            {
                int sum = numbers[left] + numbers[right];
                if (sum == target)
                {
                    return new int[] { left + 1, right + 1 };
                }
                if (sum < target)
                {
                    left++;
                }
                else
                {
                    right--;
                }
            }
            return new int[] { -1, -1 };
        }
    }
}
